package main

import (
	"fmt"
)

func main() {
	//	s := []int{0, 1, 2, 3}
	//	s[2] = 100
	//	fmt.Println(s)

	//	 panic: runtime error: index out of range
	s2 := make([]int, 6, 8) // 使用 make 创建，指定 len 和 cap 值。
	s2 = append(s2, 1)
	s2 = append(s2, 2)
	s2 = append(s2, 3)
	s2 = append(s2, 4)
	s2 = append(s2, 5)
	s2 = append(s2, 6)
	s2 = append(s2, 7)
	s2 = append(s2, 8)
	s2 = append(s2, 9)
	s2 = append(s2, 1)
	fmt.Println(s2, len(s2), cap(s2))

	data := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
	s := data[:3]
	// append 一旦超出原 slice.cap 限制，就会重新分配底层数组，即便原数组并未填满。
	s1 := append(s, 100, 200) // 添加多个值。
	fmt.Println(data)
	fmt.Println(s)
	fmt.Println(s1)

	// 通常以 2 倍容量重新分配底层数组。在⼤大批量添加数据时，建议一次性分配足够大的空
	// 间，以减少内存分配和数据复制开销。或初始化足够长的 len 属性，改用索引号进行操
	// 作。及时释放不再使用的 slice 对象，避免持有过期数组，造成 GC 无法回收。
}
